home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Pascal Super Library
/
Pascal Super Library (CW International)(1997).bin
/
MATH
/
NRPAS13
/
MMID.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1991-04-29
|
1KB
|
37 lines
PROCEDURE mmid(y,dydx: glnarray; nvar: integer; xs,htot: real;
nstep: integer; VAR yout: glnarray);
(* Programs using routine MMID must provide a
PROCEDURE derivs(x:real; y:glnarray; VAR dydx:glnarray);
which returns the derivatives dydx at location x, given both x and the
function values y. They must also define the type
TYPE
glnarray = ARRAY [1..nvar] OF real;
in the main routine. Note that this routine is in
single precision, unlike the FORTRAN version. *)
VAR
n,i: integer;
x,swap,h2,h: real;
ym,yn: glnarray;
BEGIN
h := htot/nstep;
FOR i := 1 TO nvar DO BEGIN
ym[i] := y[i];
yn[i] := y[i]+h*dydx[i]
END;
x := xs+h;
derivs(x,yn,yout);
h2 := 2.0*h;
FOR n := 2 TO nstep DO BEGIN
FOR i := 1 TO nvar DO BEGIN
swap := ym[i]+h2*yout[i];
ym[i] := yn[i];
yn[i] := swap
END;
x := x+h;
derivs(x,yn,yout)
END;
FOR i := 1 TO nvar DO BEGIN
yout[i] := 0.5*(ym[i]+yn[i]+h*yout[i])
END
END;